package wang.kentwang.utils;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;


/**
 * 数据库工具类
 * 提供连接数据库功能，增删改功能等
 * @author Administrator
 *
 */
public class DBUtil {
	private static final String JDBC="com.mysql.jdbc.Driver"; 
	private static final String URL="jdbc:mysql://localhost:3306/study?useUnicode=true&characterEncoding=UTF-8"; 
	private static final String USER="root"; 
	private static final String PASSWORD="kent1990"; 
	/**
	 * 注册驱动
	 */
	static {
		//注册驱动
		try {
			Class.forName(JDBC);
		} catch (ClassNotFoundException e) {
			System.out.println("注册失败");
		}
	}
	
	public static Connection getCon() {
		Connection con=null;
		try {
			con = DriverManager.getConnection(URL, USER, PASSWORD);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return con;

	}
	
	/**
	 * 执行增删改功能
	 * @param sql 需要执行的语句
	 * @param obj 参数设置，可是单个参数，也可使数组
	 * @return 为的sql语句执行后影响的数据条数，-1为执行失败
	 */
	public static int cud(String sql,Object...objs) {
		Connection con=null;
		PreparedStatement ps=null;
		//返回num为的sql语句执行后影响的数据条数
		int num=-1;
		try {
			//获取链接对象
			con = getCon();
			//获取预编译对象
			ps=con.prepareStatement(sql);
			//设置参数
			if(objs != null) {
				for(int i=0;i<objs.length;i++) {
					ps.setObject(i+1, objs[i]);
				}
			}
			//执行sql语句
			num=ps.executeUpdate();
		}catch (SQLException e) {
			e.printStackTrace();
		}finally{
			//关闭数据连接
			close(ps,con);
		}
		return num;
	}
	
	
	/**
	 * 关闭数据库连接
	 * @param ps 关闭PreparedStatement
	 * @param con 关闭Connection
	 */
	public static void close(PreparedStatement ps,Connection con){
		if(null != ps) {
			try {
				ps.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if(null != con) {
			try {
				con.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		} 
	}
	
}
